home *** CD-ROM | disk | FTP | other *** search
Wrap
Text File | 2008-07-12 | 40.5 KB | 1,204 lines
const gPrefs = Components.classes["@mozilla.org/preferences-service;1"] .getService(Components.interfaces.nsIPrefService) .QueryInterface(Components.interfaces.nsIPrefBranch); const gmaps_Branch = gPrefs.getBranch("gmaps."); var gsBundle = Components.classes["@mozilla.org/intl/stringbundle;1"].getService(Components.interfaces.nsIStringBundleService); var minimapstrings = gsBundle.createBundle("chrome://minimap/locale/maps.properties"); function $S(aID) { return $("sidebar").contentDocument.getElementById(aID); } window.addEventListener('load', gdgeourlInitff, false); window.addEventListener('load', sbViewMapInit, false); window.addEventListener("keydown", maploadKey, false); function maploadKey(event){ if (event.ctrlKey && event.shiftKey && !event.altKey && !event.metaKey && event.keyCode == '77'){ minimapPanel(); } } function gdgeourlInitff(e) { var contentArea = document.getElementById('content'); contentArea.addEventListener('select', gdgeourlChangeStateff, false); contentArea.addEventListener('unload', gdgeourlChangeStateff, true); contentArea.addEventListener('load', gdgeourlChangeStateff, true); contentArea.addEventListener('load', gmapsMicro, true); } function sbViewMapInit() { if (document.getElementById("contentAreaContextMenu")) { document.getElementById("contentAreaContextMenu").addEventListener("popupshowing", sbOnViewMapPopup, false); } } function sbOnViewMapPopup(e) { var msgA = minimapstrings.GetStringFromName("menuitem.a.locate"); var msgB = minimapstrings.GetStringFromName("menuitem.b.locate"); var msgC = minimapstrings.GetStringFromName("menuitem.sidebar.normal"); var msgD = minimapstrings.GetStringFromName("menuitem.maptab.normal"); document.getElementById("minimap-panel-link-context").hidden = (!gContextMenu.onLink); document.getElementById("minimap-link-context").hidden = (!gContextMenu.onLink); document.getElementById("maptab-link-context").hidden = (!gContextMenu.onLink); document.getElementById("context-minimap-tab").hidden = (gContextMenu.onLink); document.getElementById("context-minimap-sidebar").hidden = (gContextMenu.onLink); document.getElementById("context-minimap-panel").hidden = (gContextMenu.onLink); var selectedText = getSelectedText(); var menuItem = document.getElementById("context-minimap-tab"); var menuItemB = document.getElementById("context-minimap-sidebar"); var menuItemC = document.getElementById("context-minimap-panel"); if (selectedText != "") { menuItem.setAttribute('hidden','false'); menuItemB.setAttribute('hidden','false'); menuItemC.setAttribute('hidden','false'); if (selectedText.length > 25) { selectedText = selectedText.substr(0, 21) + "..."; } menuItem.setAttribute("label", msgA +' "' + selectedText + '"'); menuItemB.setAttribute("label", msgB +' "' + selectedText + '"'); menuItemC.setAttribute("label", 'Map Preview: Locate' +' "' + selectedText + '"'); mouseX = e.pageX; mouseY = e.pageY; } else { menuItem.setAttribute("label", msgD); menuItemB.setAttribute("label", msgC); menuItemC.setAttribute('label','Open Map Preview'); } } // Taken from the DictionarySearch extension by Jaap Haitsma <jaap@haitsma.org> function getSelectedText() { var node = document.popupNode; var selection = ""; if ((node instanceof HTMLTextAreaElement) || (node instanceof HTMLInputElement && node.type == "text")) { selection = node.value.substring(node.selectionStart, node.selectionEnd); } else { var focusedWindow = new XPCNativeWrapper(document.commandDispatcher.focusedWindow, 'document', 'getSelection()'); selection = focusedWindow.getSelection().toString(); } // Addresses longer than 200 characters are probably bogus anyway... if (selection.length > 200) { selection = selection.substring(0, 199); } selection = selection.replace(/(\n|\r|\t|(\r\n))+/g, " "); // Strip spaces at start and end. selection = selection.replace(/(^\s+)|(\s+$)/g, ""); selection = selection.split(" "); // Remove certain characters at the beginning and end of every word for (i = 0; i < selection.length; i++) { selection[i] = selection[i].replace(/^(\&|\(|\)|\[|\]|\{|\}|"|,|\.|!|\?|'|:|;)+/, ""); selection[i] = selection[i].replace(/(\&|\(|\)|\[|\]|\{|\}|"|,|\.|!|\?|'|:|;)+$/, ""); } selection = selection.join(" "); return selection; } function gdgeourlChangeStateff() { try{ gdgeourlBuildMenuff(); var regexp_clean = new RegExp('[^0-9;,.-]','g'); if (window.content) { var geoarray = []; var gcontent = window.content.document.getElementsByTagName('body')[0].textContent; if (gcontent) { latlong_re = /\bgeo:lat=([\-\d\.]+).*geo:lon=([\-\d\.]+)\b/; var latlong = latlong_re.exec(gcontent); var pos = 0; while (latlong) { $('geourl-statusbarff').setAttribute('src','chrome://minimap/skin/status_but.png'); $('geodiscovery-label').setAttribute('hidden','false'); if (latlong[1] && latlong[2]) { geoarray.push(latlong[1]+','+latlong[2]); } pos += latlong.index + latlong[0].length; latlong = latlong_re.exec(gcontent.substr(pos)); var x for (x in geoarray) { var coords = geoarray.shift(); gdgeourlReBuildMenuff(coords) } } } if (gcontent) { latlong_re = /\bgeo:lon=([\-\d\.]+).*geo:lat=([\-\d\.]+)\b/; var latlong = latlong_re.exec(gcontent); var pos = 0; while (latlong) { $('geourl-statusbarff').setAttribute('src','chrome://minimap/skin/status_but.png'); $('geodiscovery-label').setAttribute('hidden','false'); if (latlong[1] && latlong[2]) { geoarray.push(latlong[2]+','+latlong[1]); } pos += latlong.index + latlong[0].length; latlong = latlong_re.exec(gcontent.substr(pos)); var x for (x in geoarray) { var coords = geoarray.shift(); gdgeourlReBuildMenuff(coords) } } } if (gcontent) { latlong_re = /\bgeo:lat=([\-\d\.]+).*geo:long=([\-\d\.]+)\b/; var latlong = latlong_re.exec(gcontent); var pos = 0; while (latlong) { $('geourl-statusbarff').setAttribute('src','chrome://minimap/skin/status_but.png'); $('geodiscovery-label').setAttribute('hidden','false'); if (latlong[1] && latlong[2]) { geoarray.push(latlong[1]+','+latlong[2]); } pos += latlong.index + latlong[0].length; latlong = latlong_re.exec(gcontent.substr(pos)); var x for (x in geoarray) { var coords = geoarray.shift(); gdgeourlReBuildMenuff(coords) } } } if (gcontent) { latlong_re = /\bgeo:long=([\-\d\.]+).*geo:lat=([\-\d\.]+)\b/; var latlong = latlong_re.exec(gcontent); var pos = 0; while (latlong) { $('geourl-statusbarff').setAttribute('src','chrome://minimap/skin/status_but.png'); $('geodiscovery-label').setAttribute('hidden','false'); if (latlong[1] && latlong[2]) { geoarray.push(latlong[2]+','+latlong[1]); } pos += latlong.index + latlong[0].length; latlong = latlong_re.exec(gcontent.substr(pos)); var x for (x in geoarray) { var coords = geoarray.shift(); gdgeourlReBuildMenuff(coords) } } } var metas = window.content.document.getElementsByTagName('meta'); if (metas) { for (i=0; i < metas.length; i++) { metas[i].name=metas[i].name.toLowerCase(); if ((metas[i].name=='icbm')||(metas[i].name=='geo.position')) { $('geourl-statusbarff').setAttribute('src','chrome://minimap/skin/status_but.png'); $('geodiscovery-label').setAttribute('hidden','false'); var geourlvalue = metas[i].content; geourlvalue = geourlvalue.replace(regexp_clean,''); geourlvalue = geourlvalue.replace(';',','); gdgeourlcodeff(geourlvalue); } } } } }catch(err){} } function gdgeourlBuildMenuff() { $('geourl-statusbarff').setAttribute('src','chrome://minimap/skin/status_but_grey.png'); $('geodiscovery-label').setAttribute('hidden','true'); var geoMenu = $('geodiscoveryMenuPopup'); while (geoMenu.firstChild) geoMenu.removeChild(geoMenu.firstChild); } function gdgeourlReBuildMenuff(coords) { var geoMenu = $('geodiscoveryMenuPopup'); var menuitem = document.createElement('menuitem'); menuitem.setAttribute('label','geoURL: '+coords); menuitem.setAttribute('value',coords); menuitem.setAttribute('oncommand', 'geodiscoveryOpen(this.value);'); geoMenu.appendChild(menuitem); } function gdgeourlcodeff(geourlvalue) { var geoMenu = $('geodiscoveryMenuPopup'); var menuitem = document.createElement('menuitem'); menuitem.setAttribute('label','geoURL: '+geourlvalue); menuitem.setAttribute('value',geourlvalue); menuitem.setAttribute('oncommand', 'geodiscoveryOpen(this.value);'); geoMenu.appendChild(menuitem); } function gdgeourltimeoutff() { setTimeout("gdgeourlChangeStateff()", 1000); } function geodiscoveryOpen(address){ if (address != ''){ gminibrowserScope = 'panel'; gAddress = encodeURIComponent(address); gAddressB = address; gTitle = content.document.title; geoCode(); } } function testForLoadMapTabGeo(){ try{ var loadfunc = window.content.wrappedJSObject.document.getElementById("flock-maps-minibrowser").contentWindow.frames.wrappedJSObject.webTestForLoad(); if (loadfunc == 'true'){ var lat = gLat; var lng = gLng; var title = gTitle; var body = "<b>"+title+"</b><br />"+lat+","+lng; window.content.wrappedJSObject.document.getElementById("flock-maps-minibrowser").contentWindow.frames.wrappedJSObject.addItGeoDis(lat,lng,title,body);; } else{ setTimeout('testForLoadMapTabGeo()',100); } } catch(err){ setTimeout('testForLoadMapTabGeo()',100); } } function statusMapTab(){ var url = "chrome://minimap/content/maptab.xul"; var browser = window.getBrowser(); var tabs = browser.mTabs; var index; for (var i = 0; i < tabs.length; i++) { if (tabs[i].linkedBrowser.currentURI.spec == url) { index = i; } } if (index) { browser.selectedTab = tabs[index]; } else { browser.selectedTab = browser.addTab(url); } } function minimapContextSidebar(){ address = getSelectedText(); gminibrowserScope = 'sidebar'; if ($('viewminimap').getAttribute('checked') != 'true'){ toggleSidebar('viewminimap'); gAddress = encodeURIComponent(address); gAddressB = address; gTitle = content.document.title; setTimeout('geoCode()',100); } else{ gAddress = encodeURIComponent(address); gAddressB = address; gTitle = content.document.title; geoCode(); } } function minimapContext(){ address = getSelectedText(); gminibrowserScope = 'maptab'; gAddress = encodeURIComponent(address); gAddressB = address; gTitle = content.document.title; var url = "chrome://minimap/content/maptab.xul"; var browser = window.getBrowser(); var tabs = browser.mTabs; var index; for (var i = 0; i < tabs.length; i++) { if (tabs[i].linkedBrowser.currentURI.spec == url) { index = i; } } if (index) { browser.selectedTab = tabs[index]; } else { browser.selectedTab = browser.addTab(url); } geoCode(); } function minimapPanel(){ address = getSelectedText(); if(!address) var address = prompt('Preview Address',''); if(!address){} else{ gminibrowserScope = 'panel'; gAddress = encodeURIComponent(address); gAddressB = address; gTitle = content.document.title; geoCode(); } } //const nsIRDFRemoteDataSource = Components.interfaces.nsIRDFRemoteDataSource; var $ = function(x) { return document.getElementById(x); }; var gMapsDS = null; var gAddress = null; var gAddressB = null; var gTitle = null; var gLat = null; var gLng = null; var gminibrowserScope = null; var gmapsData = {}; var gmapsId = null; var gObserver = { onAssert : function(ds, source, predicate, target){ }, onUnassert : function(ds, source, predicate, target){ }, onChange : function(ds, source, predicate, oldTarget, newTarget){ }, onMove : function(ds, oldSource, newSource, predicate, target){}, onBeginUpdateBatch : function(ds){}, onEndUpdateBatch : function(ds){} }; // ################ end of global/common variables #################### // ##################### end of init / close code ############################# //********************** datasource code ****************************** function flock_mapsGetDS() { var RDFService = Components.classes["@mozilla.org/rdf/rdf-service;1"].getService().QueryInterface(Components.interfaces.nsIRDFService); var dirService = Components.classes['@mozilla.org/file/directory_service;1'].getService(Components.interfaces.nsIProperties); var profileDir = dirService.get('ProfD', Components.interfaces.nsILocalFile); if(!gMapsDS) { // Create file object in the user's profile path. var file = Components.classes['@mozilla.org/file/local;1'].createInstance(Components.interfaces.nsILocalFile); file.initWithPath(profileDir.path); file.append('flock_maps.rdf'); if(!file.exists()) file.createUnique(0,0700); // Create the datasource and a sequence gMapsDS = new RDFDataSource('file://'+file.path); var root = gMapsDS.getNode("urn:flock:maps:addresses"); root.makeSeq(); var root = gMapsDS.getNode("urn:flock:maps:kml"); root.makeSeq(); } return gMapsDS; } function rebuild() { var ds = flock_mapsGetDS(); var ui = document.getElementById('address_list'); ui.database.AddDataSource(ds.getRawDataSource()); ui.ref = "urn:flock:maps:addresses"; ui.builder.rebuild(); } function _mns(str) { return "http://www.flock.com/rdf/maps#" + str; } function addressCount(){ var ds = flock_mapsGetDS(); var root = ds.getNode("urn:flock:maps:addresses"); // Just using getChildCount() doesn't work for some reason. Too bad for now. var cnt=0; var children = root.getChildren(); while(children.hasMoreElements()){ children.getNext(); cnt++; } return cnt; } function add_object(data){ try{ var ds = flock_mapsGetDS(); var container = ds.getNode("urn:flock:maps:addresses"); var date=new Date(); var id='obj_' + date.getTime(); var root = ds.getNode("urn:flock:maps:addresses"); var node = ds.getNode("urn:flock:maps:addresses:" + id); node.addTargetOnce(_mns('id'), "urn:flock:maps:addresses:" + id ); node.addTargetOnce(_mns('sourceurl'), data.sourceurl + "" ); node.addTargetOnce(_mns('location'), data.address + ""); node.addTargetOnce(_mns('indexlabel'), data.indexlabel +""); node.addTargetOnce(_mns('lat'), data.lat + "" ); node.addTargetOnce(_mns('lng'), data.lng + "" ); node.addTargetOnce(_mns('title'), data.title + "" ); node.addTargetOnce(_mns('description'), (data.description || "") ); node.addTargetOnce(_mns('accuracy'), data.accuracy + "" ); node.addTargetOnce(_mns('country'), (data.country || "") ); node.addTargetOnce(_mns('state'), (data.state || "") ); node.addTargetOnce(_mns('county'), (data.county || "") ); node.addTargetOnce(_mns('locality'), (data.locality || "") ); node.addTargetOnce(_mns('postal'), (data.postal || "") ); root.addChild(node); ds.save(); gmapsId = id; } catch(e){ } } function showSel(id){ aTree = document.getElementById('sidebar').contentWindow.$('address_list'); aCols = 'idCol'; var z = addressCount(); for (var i = 0; i < z; ++i) { var col = aTree.columns.getNamedColumn(aCols); var t = aTree.view.getCellText(i, col); if(id == t){ //var boxobject = aTree.boxObject; //boxobject.QueryInterface(Components.interfaces.nsITreeBoxObject); //boxobject.scrollToRow(i); aTree.view.selection.select(i); } } } // ####################### end of main datasource code ######### // ******************* geocode code ********************** // --------- google geocoder--------------------- function geoCode() { var address = gAddress; var domain = gPrefs.getCharPref("extensions.gmaps.domain"); req = new XMLHttpRequest (); req.onreadystatechange = getMapsResponseG; req.open("GET","http://"+domain+"/maps/geo?q="+address+"&output=json&key=ABQIAAAAYgWXR5db6m93gnVrMsuXtxQncSHX4Q3-Ab3FozCaoQoCHwys1RTHg7pQTMlWwiL_zaU6tQ386P4zMw",true); req.send(null); } function getMapsResponseG(){ if (req.readyState == 4) { if (req.status == 200) { var results = JSON.parse(req.responseText); var code = results.Status.code; if (code == "200"){ if (results.Placemark.length == 1){ var placemark = results.Placemark[0]; var lat = placemark.Point.coordinates[1]; var lng = placemark.Point.coordinates[0]; var altd = placemark.Point.coordinates[2]; var accuracy = placemark.AddressDetails.Accuracy; try{var country = placemark.AddressDetails.Country.CountryNameCode;}catch(e){var country = '';}; try{var state = placemark.AddressDetails.Country.AdministrativeArea.AdministrativeAreaName;}catch(e){var state = '';}; try{var county = placemark.AddressDetails.Country.AdministrativeArea.SubAdministrativeArea.SubAdministrativeAreaName;}catch(e){var county = '';}; try{var locality = placemark.AddressDetails.Country.AdministrativeArea.SubAdministrativeArea.Locality.LocalityName;}catch(e){var locality = '';}; try{var postal = placemark.AddressDetails.Country.AdministrativeArea.SubAdministrativeArea.Locality.PostalCode.PostalCodeNumber;}catch(e){var postal = '';} try{var street = placemark.AddressDetails.Country.AdministrativeArea.SubAdministrativeArea.Locality.Thoroughfare.ThoroughfareName;}catch(e){var street = '';}; var data = {}; data.lat = lat; data.lng = lng; data.accuracy = accuracy; data.address = gAddressB; data.title = gTitle; data.country = country; data.state = state; data.county = county; data.locality = locality; data.postal = postal; data.street = street; data.altd = altd; try{ data.sourceurl = content.document.location; if (data.sourceurl == "about:blank") data.sourceurl = ""; } catch(err){ data.sourceurl = ""; } data.indexlabel = addressCount()+1; data.indexlabel = data.indexlabel.toString(); if(gminibrowserScope != 'panel'){ add_object(data); } gLat = lat; gLng = lng; if(gminibrowserScope == 'maptab'){ setTimeout('testForContextLoadMapTab()',100); } else if(gminibrowserScope == 'panel'){ gmapsData = data; openMapPanel(); } else{ setTimeout('testForContextLoad()',100); } } // end one result if else{ if(gminibrowserScope == 'maptab'){ var geoList = window.content.document.getElementById('multiaddress-list'); geoList.setAttribute('hidden',false); var mapDeck = window.content.document.getElementById('maps-deck'); mapDeck.setAttribute('hidden',true); } else if(gminibrowserScope == 'panel'){ openMapPanelList(); var geoList = document.getElementById('panel-multiaddress-list'); } else{ var geoList = $S('multiaddress-list'); geoList.setAttribute('hidden',false); var mapDeck = $S('maps-deck'); mapDeck.setAttribute('hidden',true); } for (var i = 0; i <= results.Placemark.length - 1; i++){ var placemark = results.Placemark[i]; var lat = placemark.Point.coordinates[1]; var lng = placemark.Point.coordinates[0]; var altd = placemark.Point.coordinates[2]; var accuracy = placemark.AddressDetails.Accuracy; try{var country = placemark.AddressDetails.Country.CountryNameCode;}catch(e){var country = '';}; try{var state = placemark.AddressDetails.Country.AdministrativeArea.AdministrativeAreaName;}catch(e){var state = '';}; try{var county = placemark.AddressDetails.Country.AdministrativeArea.SubAdministrativeArea.SubAdministrativeAreaName;}catch(e){var county = '';}; try{var locality = placemark.AddressDetails.Country.AdministrativeArea.SubAdministrativeArea.Locality.LocalityName;}catch(e){var locality = '';}; try{var postal = placemark.AddressDetails.Country.AdministrativeArea.SubAdministrativeArea.Locality.PostalCode.PostalCodeNumber;}catch(e){var postal = '';}; try{var street = placemark.AddressDetails.Country.AdministrativeArea.SubAdministrativeArea.Locality.Thoroughfare.ThoroughfareName;}catch(e){var street = '';}; var structAdd = placemark.address; try{ var url = content.document.location; if (url == "about:blank") url = ""; } catch(err){ url = ""; } var coords = lat + ',' + lng; var listitem = document.createElement('listitem'); listitem.setAttribute('label',structAdd); listitem.setAttribute('value',coords); listitem.setAttribute('title',structAdd); listitem.setAttribute('accuracy',accuracy); listitem.setAttribute('description',''); listitem.setAttribute('url',url); listitem.setAttribute('country',country); listitem.setAttribute('state',state); listitem.setAttribute('county',county); listitem.setAttribute('locality',locality); listitem.setAttribute('postal',postal); listitem.setAttribute('street',street); listitem.setAttribute('altd',altd); geoList.appendChild(listitem); } // for } // end more than one else } // end code 200 if (code != "200"){ pipesGeoCode(); } } } } // -------------- pipes json geocoder -------------------- function pipesGeoCode(){ var address = gAddress; req = new XMLHttpRequest (); req.onreadystatechange = getaddressPipesResponseG; req.open("GET","http://pipes.yahoo.com/pipes/pipe.run?_id=qudHFl3z2xGTWsmGnkartA&_render=json&_run=1&location="+address,true); req.send(null); } function getaddressPipesResponseG(){ if (req.readyState == 4) { if (req.status == 200) { var results = JSON.parse(req.responseText); var resultset = results.value.items[0]; var lat = resultset.lat; //eg returns "56.575849" var lng = resultset.lon; //eg returns "-3.231635" var accuracy = resultset.quality; //eg returns "40" try{var country = resultset.country;}catch(e){var country = '';} try{var state = resultset.state;}catch(e){var state = '';} try{var locality = resultset.city;}catch(e){var locality = '';} try{var postal = resultset.postal;}catch(e){var postal = '';} try{var street = resultset.street;}catch(e){var street = '';} if (lat != ''){ var data = {}; data.lat = lat; data.lng = lng; data.accuracy = accuracy; data.address = gAddressB; data.title = gTitle; data.country = country; data.state = state; data.locality = locality; data.postal = postal; try{ data.sourceurl = content.document.location; if (data.sourceurl == "about:blank") data.sourceurl = ""; } catch(err){ data.sourceurl = ""; } data.indexlabel = addressCount()+1; data.indexlabel = data.indexlabel.toString(); if(gminibrowserScope != 'panel'){ add_object(data); } gLat = lat; gLng = lng; if(gminibrowserScope == 'maptab'){ setTimeout('testForContextLoadMapTab()',100); } else if(gminibrowserScope == 'panel'){ gmapsData = data; openMapPanel(); } else{ setTimeout('testForContextLoad()',100); } } } else{ } } } function testForContextLoad(){ if ($('viewminimap').getAttribute('checked') != 'true'){ toggleSidebar('viewminimap'); } try{ var loadfuncside = document.getElementById('sidebar').contentWindow; loadfuncside.rebuildMap( ); var loadfunc = loadfuncside.$('flock-maps-minibrowser').contentWindow.webTestForLoad(); if (loadfunc == 'true'){ var lat = gLat; var lng = gLng; var scope = document.getElementById('sidebar').contentWindow; scope.$('flock-maps-minibrowser').contentWindow.gotoLatLng(lat,lng); showSel('urn:flock:maps:addresses:'+gmapsId); } else{ setTimeout('testForContextLoad()',100); } } catch(err){ setTimeout('testForContextLoad()',100); } } function testForContextLoadMapTab(){ try{ var taburi = "chrome://minimap/content/maptab.xul"; var browser = window.getBrowser(); var tabs = browser.mTabs; var index; for (var i = 0; i < tabs.length; i++) { if (tabs[i].linkedBrowser.currentURI.spec == taburi) { index = i; } } if (index) { browser.selectedTab = tabs[index]; } else { browser.selectedTab = browser.addTab(taburi); } var loadfunc = window.content.wrappedJSObject.document.getElementById("flock-maps-minibrowser").contentWindow.frames.wrappedJSObject.webTestForLoad(); if (loadfunc == 'true'){ var lat = gLat; var lng = gLng; window.content.wrappedJSObject.document.getElementById("flock-maps-minibrowser").contentWindow.frames.wrappedJSObject.gotoLatLng(lat,lng); } else{ setTimeout('testForContextLoadMapTab()',100); } } catch(err){ setTimeout('testForContextLoadMapTab()',100); } } function addContextLink(scope){ var url; try { var url = gContextMenu.linkURL} // new FF, other? catch(e) { try { var url = gContextMenu.linkURL()} // old FF, SM, other? catch(e) { var url = String(gContextMenu.link)} // either FF, other? } gTitle = content.document.title; gminibrowserScope = scope; var datalabel = url; //var geoUri = url.substr(0,4); //if (geoUri == "geo:"){ //} if (datalabel.match('.kmz') || datalabel.match('.kml') || datalabel.match('=kml') || datalabel.match('bbs.keyhole.com') || datalabel.match('http://maps.google.com/maps/ms') || datalabel.match('.rss') || datalabel.match('.georss') || datalabel.match('=georss') || datalabel.match('=rss')){ if (scope != 'panel'){ var datalabel = datalabel.split(' ')[0]; contextAddXml(datalabel); } else{ alert('Unable to View KML/GeoRSS in Map Preview') } } else if (datalabel.match('maps.google') || datalabel.match('maps.yahoo') || datalabel.match('maps.live') ){ datalabel = datalabel.split(' ')[0]; addressParse(datalabel); geoCode(); } else{ gAddressB = datalabel; addressParse(datalabel); geoCode(); } } function addressParse(address) { address = address.replace( /[\r\n>]/g, ' ' ); encodedAddress = encodeURI(address); gAddress = encodedAddress; if (encodedAddress.match('maps.live')) { var query = encodedAddress; var pairs = query.split("&"); for (var i=0; i<pairs.length; i++) { var pos = pairs[i].indexOf("="); var argname = pairs[i].substring(0,pos).toLowerCase(); var value = pairs[i].substring(pos+1); if (argname == "where1") {var loc = value;} if (argname == "cp") {var loc = value;} } loc = loc.replace(/~/gi,','); encodedAddress = loc; gAddress = encodedAddress; gAddressB = encodedAddress; } if (encodedAddress.match('maps.yahoo')) { if (encodedAddress.match('lat=')) { var query = encodedAddress; var pairs = query.split("&"); for (var i=0; i<pairs.length; i++) { var pos = pairs[i].indexOf("="); var argname = pairs[i].substring(0,pos).toLowerCase(); var value = pairs[i].substring(pos+1); if (argname == "lat") {var lat = value;} if (argname == "lon") {var lon = value;} } encodedAddress = lat + ',' + lon; gAddress = encodedAddress; gAddressB = encodedAddress; } else{ encodedAddress = encodedAddress.split('?addr=')[1]; encodedAddress = encodedAddress.split('%0A')[0]; encodedAddress = encodedAddress.replace( /\+at\+.*&csz=/gi, ', '); encodedAddress = encodedAddress.replace( /&csz=/gi, ', '); encodedAddress = encodedAddress.replace( /&country=/gi, ', '); encodedAddress = encodedAddress.replace( /\+/g, ' '); gAddress = encodedAddress; gAddressB = encodedAddress; } } if (encodedAddress.match('maps.google')) { encodedAddress = encodedAddress.replace(/loc%3A/,'') // sometimes there is a 'loc:' in the query encodedAddress = encodedAddress.replace(/loc%/,'') // sometimes there is a 'loc:' in the query encodedAddress = encodedAddress.replace(/253A/,'') // sometimes there is a '253A:' in the query if (encodedAddress.match('q=')){ encodedAddress = encodedAddress.split('?q=')[1]; } if (encodedAddress.match('addr=')){ encodedAddress = encodedAddress.split('?addr=')[1]; } if (encodedAddress.match('%0A')){ encodedAddress = encodedAddress.split('%0A')[0]; } if (encodedAddress.match('%2540')){ encodedAddress = encodedAddress.split('%2540')[0]; } if (encodedAddress.match(/\(/)){ encodedAddressb = encodedAddress.split('(')[0]; encodedAddressc = encodedAddress.split(')')[1]; encodedAddress = encodedAddressb+encodedAddressc; } if (encodedAddress.match('ll=')){ encodedAddress = encodedAddress.split('?ll=')[1]; } if (encodedAddress.match('spn=')){ encodedAddress = encodedAddress.split('spn=')[0]; } encodedAddress = encodedAddress.replace( /\+/g, ' '); gAddress = encodedAddress; gAddressB = encodedAddress; } } function contextAddXml(source){ var kml = {}; kml.title = gTitle; kml.url = source; kml.checked = true; addContextGeoXmlData(kml); } function addContextGeoXmlData(kml){ var ds = flock_mapsGetDS(); var container = ds.getNode("urn:flock:maps:kml"); var date=new Date(); var id='obj_' + date.getTime(); var root = ds.getNode("urn:flock:maps:kml"); var node = ds.getNode("urn:flock:maps:kml:" + id); node.addTargetOnce(_mns('id'), "urn:flock:maps:kml:" + id ); node.addTargetOnce(_mns('kmlurl'), kml.url + "" ); node.addTargetOnce(_mns('kmltitle'), kml.title + "" ); node.addTargetOnce(_mns('kmlchecked'), kml.checked + "" ); root.addChild(node); ds.save(); if(gminibrowserScope == 'sidebar'){ if ($('viewminimap').getAttribute('checked') != 'true'){ toggleSidebar('viewminimap'); } else{ addContextGeoXmlLayers(true); } } else{ var taburi = "chrome://minimap/content/maptab.xul"; var browser = window.getBrowser(); var tabs = browser.mTabs; var index; for (var i = 0; i < tabs.length; i++) { if (tabs[i].linkedBrowser.currentURI.spec == taburi) { index = i; } } if (index) { browser.selectedTab = tabs[index]; setTimeout('addContextGeoXmlLayers(true)',100); } else { browser.selectedTab = browser.addTab(taburi); } } } function addContextGeoXmlLayers(zoom){ if(gminibrowserScope == 'sidebar'){ var kmlMenu = $S('kml-list'); while (kmlMenu.firstChild){ kmlMenu.removeChild(kmlMenu.firstChild); } $S('flock-maps-minibrowser').contentWindow.clearGeoXml(); } else{ var kmlMenu = window.content.document.getElementById('kml-list'); while (kmlMenu.firstChild){ kmlMenu.removeChild(kmlMenu.firstChild); } window.content.wrappedJSObject.document.getElementById("flock-maps-minibrowser").contentWindow.frames.wrappedJSObject.clearGeoXml(); } var ds = flock_mapsGetDS(); var container = ds.getNode("urn:flock:maps:kml"); var nodes = container.getChildren(); while ( nodes.hasMoreElements() ) { var node = nodes.getNext(); var source = ""; var checked = ""; var id =""; var title = ""; if (node.getTarget(_mns('id'))) id = node.getTarget(_mns('id')).getValue(); if (node.getTarget(_mns('kmlurl'))) source = node.getTarget(_mns('kmlurl')).getValue(); if (node.getTarget(_mns('kmltitle'))) title = node.getTarget(_mns('kmltitle')).getValue(); if (node.getTarget(_mns('kmlchecked'))) checked = node.getTarget(_mns('kmlchecked')).getValue(); if(gminibrowserScope == 'sidebar'){ $S('flock-maps-minibrowser').contentWindow.addGeoXML(source,checked); } if(gminibrowserScope == 'maptab'){ window.content.wrappedJSObject.document.getElementById("flock-maps-minibrowser").contentWindow.frames.wrappedJSObject.addGeoXML(source,checked); } // add richlistbox items var menuitem = document.createElement('richlistitem'); menuitem.setAttribute('id',id); menuitem.setAttribute('value',source); menuitem.setAttribute('style','overflow: hidden'); menuitem.setAttribute('onclick','webGotoXmlViewport(this)'); var checkbox = document.createElement('checkbox'); checkbox.setAttribute('id',id); checkbox.setAttribute('value',source); checkbox.setAttribute('checked',checked); checkbox.setAttribute('onclick','kmlListDo(this)'); menuitem.appendChild(checkbox); var label = document.createElement('label'); label.setAttribute('value',title); menuitem.appendChild(label); kmlMenu.appendChild(menuitem); } if (zoom){ var lastitem = kmlMenu.lastChild; var theid = lastitem.getAttribute('value'); if(gminibrowserScope == 'sidebar'){ minimapBrowserScope().gotoXmlViewport(theid); } if(gminibrowserScope == 'maptab'){ window.content.wrappedJSObject.document.getElementById("flock-maps-minibrowser").contentWindow.frames.wrappedJSObject.gotoXmlViewport(theid); } } } function multiAddressAddPanel(coords){ var geoList = $('panel-multiaddress-list'); var title = geoList.selectedItem.getAttribute('title'); var url = geoList.selectedItem.getAttribute('url'); var description = geoList.selectedItem.getAttribute('description'); var accuracy = geoList.selectedItem.getAttribute('accuracy'); var country = geoList.selectedItem.getAttribute('country'); var state = geoList.selectedItem.getAttribute('state'); var county = geoList.selectedItem.getAttribute('county'); var locality = geoList.selectedItem.getAttribute('locality'); var postal = geoList.selectedItem.getAttribute('postal'); var street = geoList.selectedItem.getAttribute('street'); var altd = geoList.selectedItem.getAttribute('altd'); var lat = coords.split(',')[0]; var lng = coords.split(',')[1]; var data = {}; data.lat = lat; data.lng = lng; data.altd = altd; data.accuracy = accuracy; data.address = geoList.selectedItem.label; data.title = title; data.sourceurl = url; data.description = description; data.country = country; data.state = state; data.county = county; data.locality = locality; data.postal = postal; data.street = street; data.indexlabel = addressCount()+1; data.indexlabel = data.indexlabel.toString(); gmapsData = data; gLat = lat; gLng = lng; var geoList = document.getElementById('panel-multiaddress-list'); while (geoList.firstChild) geoList.removeChild(geoList.firstChild); var panel = document.getElementById('addresslistpanel'); panel.hidePopup(); openMapPanel(); } function openAddressServicePanel(service){ var startaddress = gPrefs.getCharPref("extensions.gmaps.startprefnew"); var domain = gPrefs.getCharPref("extensions.gmaps.domain"); var ydomain = gPrefs.getCharPref("extensions.gmaps.ydomain"); var nodelat = gmapsData.lat; var nodelng = gmapsData.lng; var nodeurl = gmapsData.sourceurl; var nodetitle = gmapsData.title; var nodeaddress = gmapsData.address; var nodedescription = gmapsData.description; var url = switchService(service,domain,ydomain,startaddress,nodelat,nodelng,nodeurl,nodetitle,nodeaddress,nodedescription); var newTab = window.getBrowser().addTab(url); window.getBrowser().selectedTab = newTab; } function openMapPanel(){ var dirService = Components.classes['@mozilla.org/file/directory_service;1'].getService(Components.interfaces.nsIProperties); var profileDir = dirService.get('ProfD', Components.interfaces.nsILocalFile); pathway = "file://"+profileDir.path+"/flock_maps.rdf"; pathway = pathway.replace(/ /g,'%20'); $('mappanel-from-list').setAttribute('datasources',pathway); $('mappanel-from-list').setAttribute('ref','urn:flock:maps:addresses'); $('mappanel-to-list').setAttribute('datasources',pathway); $('mappanel-to-list').setAttribute('ref','urn:flock:maps:addresses'); var panel = document.getElementById('mappanel'); var mmimage = document.getElementById('mappanelimage'); var url = "http://maps.google.com/staticmap?center="+gLat+","+gLng+"&zoom=13&size=400x300&markers="+gLat+","+gLng+",blue&key=ABQIAAAAYgWXR5db6m93gnVrMsuXtxQncSHX4Q3-Ab3FozCaoQoCHwys1RTHg7pQTMlWwiL_zaU6tQ386P4zMw"; mmimage.setAttribute('src',url); try{ panel.hidden = false; panel.openPopupAtScreen(screen.availLeft + (screen.availWidth - 460) / 2, screen.availTop + (screen.availHeight - 360) / 2, false); var startaddress = gPrefs.getCharPref("extensions.gmaps.startprefnew"); document.getElementById('mappanel-from').setAttribute('value', startaddress); document.getElementById('mappanel-to').setAttribute('value', gmapsData.address); } catch(e){ panel.hidden = true; alert('Preview Panel requires Firefox 3'); } } function openMapPanelList(){ var panel = document.getElementById('addresslistpanel'); try{ panel.hidden = false; panel.openPopupAtScreen(screen.availLeft + (screen.availWidth - 460) / 2, screen.availTop + (screen.availHeight - 360) / 2, false); } catch(e){ panel.hidden = true; alert('Preview Panel requires Firefox 3'); } } function panelAddressSwitch(){ var from = document.getElementById('mappanel-from').value; var to = document.getElementById('mappanel-to').value; document.getElementById('mappanel-from').setAttribute('value', to); document.getElementById('mappanel-to').setAttribute('value', from); } function panelAddressDirections(service){ var domain = gPrefs.getCharPref("extensions.gmaps.domain"); var ydomain = gPrefs.getCharPref("extensions.gmaps.ydomain"); var directionsFrom = document.getElementById('mappanel-from').value; var directionsTo = document.getElementById('mappanel-to').value; var url = service; switch (url) { case "google": url = "http://"+domain+"/maps?saddr="+directionsFrom+"&daddr="+directionsTo; break; case "yahoo": url = "http://"+ydomain+"/dd?taddr="+directionsTo+"&addr="+directionsFrom; break; case "microsoft": url = "http://local.live.com/default.aspx?rtp=adr."+directionsFrom+"~adr."+directionsTo; break; } var newTab = window.getBrowser().addTab(url); window.getBrowser().selectedTab = newTab; } function panelAddAddress(){ document.getElementById('addAddressPanel').setAttribute('image','chrome://minimap/skin/accept.png'); add_object(gmapsData); } function mappanelFromReplaceAddress(address){ $('mappanel-from').setAttribute('value', address); } function mappanelToReplaceAddress(address){ $('mappanel-to').setAttribute('value', address); } function mappanelHidden(){ document.getElementById('addAddressPanel').removeAttribute('image'); } function openSidebarFromPanel(scope){ add_object(gmapsData); var panel = document.getElementById('mappanel'); panel.hidePopup(); if(scope == 'maptab'){ setTimeout('testForContextLoadMapTab()',100); } else{ setTimeout('testForContextLoad()',100); } } Components.utils.import("resource://gre/modules/Microformats.js"); function gmapsMicro(){ var gmapsMicroformatsArray = Microformats.get('adr', content.document); for (i = 0; i < gmapsMicroformatsArray.length; i++) { gmapsMicroBuildMenu(gmapsMicroformatsArray[i]); } if (gmapsMicroformatsArray.length != 0){ $('geourl-statusbarff').setAttribute('src','chrome://minimap/skin/status_but.png'); $('geodiscovery-label').setAttribute('hidden','false'); } var gmapsMicroformatsArrayGeo = Microformats.get('geo', content.document); if (gmapsMicroformatsArrayGeo.length != 0){ for (i = 0; i < gmapsMicroformatsArrayGeo.length; i++) { gmapsMicroBuildMenu(gmapsMicroformatsArrayGeo[i]); } $('geourl-statusbarff').setAttribute('src','chrome://minimap/skin/status_but.png'); $('geodiscovery-label').setAttribute('hidden','false'); } } function gmapsMicroBuildMenu(geourlvalue) { var geoMenu = $('geodiscoveryMenuPopup'); var menuitem = document.createElement('menuitem'); menuitem.setAttribute('label','uF: '+geourlvalue); menuitem.setAttribute('value',geourlvalue); menuitem.setAttribute('oncommand', 'geodiscoveryOpen(this.value);'); geoMenu.appendChild(menuitem); } function mapsPopupShown(){ }